package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.constant.HrConstants;
import org.jsola.hr.dao.IPersonalEventDAO;
import org.jsola.hr.dto.PersonalEventAddDTO;
import org.jsola.hr.dto.PersonalEventUpdateDTO;
import org.jsola.hr.entity.PersonalEventDO;
import org.jsola.hr.query.PersonalEventQuery;
import org.jsola.hr.vo.EmpInfoVO;
import org.jsola.hr.vo.PersonalEventListVO;
import org.jsola.hr.vo.PersonalEventResultByYearVO;
import org.jsola.hr.vo.PersonalEventVO;
import org.jsola.user.core.TokenUser;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


/**
 * 人事变动表
 *
 * @author ds
 */
public interface IPersonalEventService extends IService<IPersonalEventDAO, PersonalEventDO> {

    /**
     * 新增人事变动表
     *
     * @param personalEventAddDTO 新增人事变动表DTO
     * @param tokenUser           当前用户
     * @return 人事变动表详情信息
     */
    PersonalEventVO save(PersonalEventAddDTO personalEventAddDTO, TokenUser tokenUser);

    /**
     * 新增人事变动表 保存do全部数据 仅用于更换公司使用
     *
     * @param personalEventDO 新增人事变动表DO
     * @return 人事变动表详情信息
     */
    Integer onlySave(PersonalEventDO personalEventDO);

    /**
     * 新增人事变动
     *
     * @param empInfoVO 员工信息
     * @param tokenUser 当前用户
     * @param desc      描述
     * @param eventType 事件类型
     * @param eventName 事件名称
     */
    void autoSave(EmpInfoVO empInfoVO, TokenUser tokenUser, String desc, String eventType, String eventName);

    /**
     * 新增人事变动
     *
     * @param empInfoVOList 员工信息列表
     * @param desc          描述
     * @param eventType     事件类型
     * @param eventName     事件名称
     * @param tokenUser     当前用户
     */
    void autoSaveList(List<EmpInfoVO> empInfoVOList, String desc, String eventType, String eventName, TokenUser tokenUser);

    /**
     * 修改人事变动表
     *
     * @param personalEventUpdateDTO 修改人事变动表DTO
     * @param tokenUser              当前用户
     * @return 更新数量
     */
    int update(PersonalEventUpdateDTO personalEventUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除人事变动表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser        当前用户
     * @param personalEventIds 人事变动表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long... personalEventIds);

    @Transactional(value = HrConstants.TX, rollbackFor = Exception.class)
    int deleteById(TokenUser tokenUser, Long personalEventIds);

    /**
     * 根据人事变动表id查找
     *
     * @param personalEventId 人事变动表id
     * @param siteId          所属站点id
     * @return 人事变动表详情信息
     */
    PersonalEventVO selectById(Long personalEventId, String siteId);

    /**
     * 查询人事变动表
     *
     * @param personalEventQuery 查询条件
     * @param siteId             所属站点id
     * @return 人事变动表列表信息
     */
    List<PersonalEventListVO> select(PersonalEventQuery personalEventQuery, String siteId);

    /**
     * 查询人事变动表记录数
     *
     * @param personalEventQuery 查询条件
     * @param siteId             所属站点id
     * @return 人事变动表记录数
     */
    int selectCount(PersonalEventQuery personalEventQuery, String siteId);

    /**
     * 分页查询人事变动表
     *
     * @param personalEventQuery 查询条件
     * @param siteId             所属站点id
     * @return 人事变动表列表信息
     */
    Page<PersonalEventListVO> selectPage(PersonalEventQuery personalEventQuery, String siteId);


    /**
     * 根据人事变动表id查找
     *
     * @param personalEventId 人事变动表id
     * @param siteId          所属站点id
     * @return 人事变动表
     */
    PersonalEventDO selectDOById(Long personalEventId, String siteId);

    /**
     * 查询人事变动表
     *
     * @param personalEventQuery 查询条件
     * @param siteId             所属站点id
     * @return 人事变动表列表
     */
    List<PersonalEventDO> selectDO(PersonalEventQuery personalEventQuery, String siteId);

    /**
     * 查询员工的人事变动
     *
     * @param empId     员工Id
     * @param tokenUser 当前用户
     * @return 员工的人事变动
     */
    List<PersonalEventResultByYearVO> selectByEmpId(String empId, TokenUser tokenUser);

    /**
     * 查询员工的人事变动
     *
     * @param empId     员工Id
     * @param tokenUser 当前用户
     * @return 员工的人事变动
     */
    List<PersonalEventDO> selectDoByEmpId(String empId, TokenUser tokenUser);


//    /**
//     * 查询用户的人事变动
//     *
//     * @param userId    员工Id
//     * @param tokenUser 当前用户
//     * @return 员工的人事变动
//     */
//    List<PersonalEventResultByYearVO> selectByUserId(String userId, TokenUser tokenUser);
}


